import { neo4jRequest, apiPaths } from './request';

/**
 * 查询产业链上下游
 * @param {Object} params - 查询参数
 * @param {string} params.companyName - 公司名称
 * @param {number} params.depth - 查询深度
 * @returns {Promise} - 返回查询结果
 */
export function getSupplyChain(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.supplyChain,
    method: 'get',
    params
  });
}

/**
 * 查询行业内企业
 * @param {Object} params - 查询参数
 * @param {string} params.industryName - 行业名称
 * @returns {Promise} - 返回查询结果
 */
export function getIndustryCompanies(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.industry,
    method: 'get',
    params
  });
}

/**
 * 查询行业分析数据
 * @param {Object} params - 查询参数
 * @param {string} params.industry - 行业名称
 * @returns {Promise} - 返回行业分析结果
 */
export function getIndustryAnalysis(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.industryAnalysis,
    method: 'get',
    params
  });
}

/**
 * 查询企业风险
 * @param {Object} params - 查询参数
 * @param {string} params.industryName - 行业名称
 * @param {number} params.minRiskCount - 最小风险数量
 * @returns {Promise} - 返回查询结果
 */
export function getCompanyRisks(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.companyRisks,
    method: 'get',
    params
  });
}

/**
 * 查询高新技术企业
 * @param {Object} params - 查询参数
 * @param {string} params.industryName - 行业名称
 * @returns {Promise} - 返回查询结果
 */
export function getHighTechCompanies(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.highTechCompanies,
    method: 'get',
    params
  });
}

/**
 * 查询供应链路径
 * @param {Object} params - 查询参数
 * @param {string} params.sourceCompany - 源公司名称
 * @param {string} params.targetCompany - 目标公司名称
 * @param {number} params.maxDepth - 最大深度
 * @returns {Promise} - 返回查询结果
 */
export function getSupplyChainPath(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.supplyChainPath,
    method: 'get',
    params
  });
}

/**
 * 获取各省份企业统计数据
 * @param {Object} params - 查询参数
 * @param {string} [params.province] - 可选的省份筛选参数
 * @param {string} [params.industryName] - 可选的行业筛选参数
 * @returns {Promise} - 返回各省份企业统计数据
 */
export function getCompanyStats(params = {}) {
  return neo4jRequest({
    url: '/graph-analysis/company-stats',
    method: 'get',
    params
  });
}

/**
 * 获取产品上下游关系
 * @param {Object} params - 查询参数
 * @param {string} params.productName - 产品名称
 * @param {number} params.depth - 查询深度
 * @param {string} params.direction - 查询方向 (upstream/downstream/both)
 * @returns {Promise} - 返回产品上下游关系数据
 */
export function getProductChain(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.productChain,
    method: 'get',
    params
  });
}

/**
 * 搜索产品
 * @param {Object} data - 查询参数
 * @param {string} data.keyword - 搜索关键词，可以为空，空时返回热门产品
 * @param {number} data.limit - 限制返回结果数量
 * @returns {Promise} - 返回产品搜索结果
 */
export function searchProducts(data) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.searchProducts,
    method: 'get',
    params: {
      keyword: data.keyword || '',
      limit: data.limit || 20,
      includePopular: data.keyword ? false : true // 当关键词为空时，返回热门产品
    }
  });
}

/**
 * 搜索行业（用于自动完成）
 * @param {Object} params - 查询参数
 * @param {string} params.query - 搜索关键词
 * @returns {Promise} - 返回行业搜索结果
 */
export function searchIndustry(params) {
  return neo4jRequest({
    url: '/industries/search',
    method: 'get', 
    params
  });
}

/**
 * 获取产品详情
 * @param {string} productId - 产品ID
 * @returns {Promise} - 返回产品详情
 */
export function getProductDetail(productId) {
  return neo4jRequest({
    url: apiPaths.product.detail(productId),
    method: 'get'
  });
}

/**
 * 搜索行业综合信息
 * @param {Object} params - 查询参数
 * @param {string} params.query - 搜索关键词
 * @returns {Promise} - 返回行业综合搜索结果
 */
export function searchIndustryComprehensive(params) {
  return neo4jRequest({
    url: '/industries/comprehensive/search',
    method: 'get',
    params
  });
}

/**
 * 行业企业综合分析查询
 * @param {Object} params - 查询参数
 * @param {string} params.industryName - 行业名称
 * @returns {Promise} - 返回行业企业综合分析结果
 */
export function getIndustryComprehensiveAnalysis(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.industryComprehensive,
    method: 'get',
    params
  });
}

/**
 * 识别关键材料
 * 通过连接度和中介中心性分析，识别产品链中的关键材料/产品节点
 * @returns {Promise} - 返回关键材料分析结果
 */
export function getKeyMaterials() {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.keyMaterials,
    method: "get"
  });
}

/**
 * 查询行业列表
 * @param {string} keyword 关键词
 * @returns {Promise} 返回行业列表
 */
export function searchIndustries(keyword) {
  return neo4jRequest({
    url: '/industries/search',
    method: 'get',
    params: { keyword }
  });
}

/**
 * 分析供应链脆弱性
 * 评估关键材料的供应稳定性，识别可能导致供应链中断的脆弱点
 * @param {Object} params - 查询参数
 * @param {Array} params.materials - 指定要分析的关键材料列表
 * @returns {Promise} - 返回供应链脆弱性分析结果
 */
export function getSupplyChainVulnerability(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.supplyChainVulnerability,
    method: 'get',
    params: {
      materials: params.materials
    },
    paramsSerializer: {
      indexes: null
    }
  });
}

/**
 * 分析替代路径
 * 分析某一材料缺失或成本上升时的潜在替代方案
 * @param {Object} params - 查询参数
 * @param {string} params.materialName - 要分析替代方案的材料名称
 * @param {number} params.minSimilarity - 最小相似度（0-1之间的小数）
 * @returns {Promise} - 返回替代路径分析结果
 */
export function getSubstituteAnalysis(params) {
  return neo4jRequest({
    url: apiPaths.graphAnalysis.substituteAnalysis,
    method: 'get',
    params
  });
}
